7F0C838C 	0xFCEBC	compression type 8
LW	S4,0080 (SP)	;S4=[5]	{imgtype}
ADDIU	A0,R0,0003	;A0=3
SLL	T9,S4,0x2	;T9=S4->offset	(S4*4)[14]
JAL	7F0CBF2C	;returns next A0=3 bits from data	[5]
OR	S4,T9,R0	;S4*=4: 
//7F0C83A0 	0xFCED0
LUI	T8,8005
ADDIU	T8,T8,9178	;T8=80049178: table#1
ADDU	S3,S4,T8	;S3=p->sample S4 in table#1
LW	T5,0000 (S3)	;T5=sample in table#1	[2]
LUI	T3,8005
ADDIU	T3,T3,91E0	;T3=800491E0: table#3
MULTU	T5,S6	;sample#1 * [38]	{S6=data nibbles 4+5?}
ADDU	S2,S4,T3	;S2=p->sample S4 in table#3
OR	S0,V0,R0	;S0=next 3 bits from data
LW	A2,0000 (S2)	;A2=sample in table#3	[10]
OR	A0,S8,R0	;A0=S8: target for samples	[803B06A0]
MFLO	T6		;T6=sample#1 * [38]
NOP	
NOP	
MULTU	T6,S7	;sample#1 * [38] *[38]	{S7=data nibbles 6+7}
MFLO	A1		;A1=sample#1 * [38] *[38]= [1880]
JAL	7F0C91D0	;generate a sample table!
NOP	
//7F0C83E8:	0xFCF18
LW	T7,0000 (S3)	;T7=value in table#1	[2]
LW	T4,0000 (S2)	;T4=value in table#3	[10]
OR	A0,S8,R0	;A0=S8: samples
MULTU	T7,S7	;table#1 * second size value
OR	A1,S6,R0	;A1=S6: first size value
OR	A3,S0,R0	;A3=S0: 3 bits extracted from data	[5]
SW	T4,0010 (SP)	;save table#3 -> SP+10
MFLO	A2	;A2=table#1 * second size value	[2*38=70]
JAL	7F0CB7E0	;image-specific doohick
NOP	
//7F0C8410:	0xFCF40
LUI	T9,8005
ADDU	T9,T9,S4
LW	T9,91AC (T9)	;T9=entry in table#2
SLL	T8,S5,0x2
SUBU	T8,T8,S5	;T8=width*height*3	[C40*3=24C0]
BEQ	T9,R0,0xFCF64	;branch if t#2val=0
ADDU	A0,S8,T8	;A0=samples[width*height*3]
JAL	7F0C9A48
OR	A1,S5,R0	;A1=S5: width*height
//7F0C8434:	0xFCF64
LW	T5,30AC (SP)	;T5=final target?	[800C31E8]
LW	T6,0088 (SP)	;T6=???	[0]
LW	T3,0080 (SP)	;nibble3
OR	A0,S8,R0	;A0=samples
ADDU	S0,T5,T6
OR	A3,S0,R0	;A3=final target+offset?
OR	A1,S6,R0	;A1=width
OR	A2,S7,R0	;A2=height
JAL	7F0C9DA4	;generate and link final image
SW	T3,0010 (SP)	;SP+10=nibble3
BEQ	R0,R0,0xFD08C
OR	S1,V0,R0	;S1=V0: 
//7F0CA88C


7F0CBF2C:
	accepts A0=#bits to grab
	retrieves bits using an odd bitorder, left to right: 012345678
		for a byte C0, retrieving 2 bits returns 3
LUI	A1,8009
ADDIU	A1,A1,D0A8
LW	V1,0000 (A1)	;V1=8008D0A8: bitcount	[0]
LUI	A3,8009
ADDIU	A3,A3,D0A0	;A3=8008D0A0: p->curpos
SLT	AT,V1,A0	
BEQ	AT,R0,7F0CBF84	;branch if bitcount > needed
LUI	A2,8009
ADDIU	A2,A2,D0A4	;A2=8008D0A4: p->cur datatable
//7F0CBF50:	grab more data from compressed file
LW	V0,0000 (A3)	;V0=8008D0A0: p->curpos	[803B2704]
LW	T7,0000 (A2)	;T7=8008D0A4: datatable	[00538388]
ADDIU	T1,V1,0008	;T1=bitcount+one byte
LBU	T6,0000 (V0)	;T6=byte from data
SLL	T8,T7,0x8	;T8=datatable pushed one byte
SLT	AT,T1,A0	;TRUE if enough bits now in datatable
ADDIU	T0,V0,0001	;T0=p->next byte in data
OR	T9,T6,T8	;T9=datatable | next byte
SW	T9,0000 (A2)	;save new datatable
SW	T0,0000 (A3)	;save new curpos
SW	T1,0000 (A1)	;save new bitcount
BNEZ	AT,7F0CBF50	;loop until enough is present
OR	V1,T1,R0	;V1=bitcount
//7F0CBF84:
LUI	A2,8009
ADDIU	A2,A2,D0A4
LW	T3,0000 (A2)	;T3=8008D0A4: datatable	[538388BF]
ADDIU	T7,R0,0001	;T7=1
SUBU	T2,V1,A0	;T2=bitcount-#bits	[5]
SLLV	T6,T7,A0	;T6=1<<#bits	[8]
ADDIU	T8,T6,FFFF	;T8=bitmask	[7]
SRLV	T5,T3,T2	;roll datatable to grab #bits from upper nibble	[029C1C45]
SW	T2,0000 (A1)	;save new bitcount
JR	RA
AND	V0,T5,T8	;V0=next #bits from datatable
//7F0CBFB0


7F0C9A48	fetch alpha bit registers
	accepts: A0=samples[width*height*3], A1=width*height
ADDIU	SP,SP,FFD8
SW	S2,0020 (SP)
SW	S0,0018 (SP)
OR	S2,A1,R0	;S2=width*height
SW	RA,0024 (SP)
SW	S1,001C (SP)
BLEZ	A1,7F0C9A84	;do nothing if the image uses stupid proportions
OR	S0,R0,R0	;S0=0	count
OR	S1,A0,R0	;S1=samples[width*height*3]
//7F0C9A6C:
JAL	7F0CBF2C	;grab 1 bit from data
ADDIU	A0,R0,0001
ADDIU	S0,S0,0001	;S0++	count++
ADDIU	S1,S1,0001	;S1++	cur++
BNE	S0,S2,7F0C9A6C	;loop while count < width*height
SB	V0,FFFF (S1)	;bit->samples[width*height*3 + cur]
//7F0C9A84:
LW	RA,0024 (SP)
LW	S0,0018 (SP)
LW	S1,001C (SP)
LW	S2,0020 (SP)
JR	RA
ADDIU	SP,SP,0028
